Файлы и папки сервера
Чтобы управлять любыми файлами и папками на сервере, используйте класс pm_ServerFileManager. Этот класс позволяет выполнять те же операции, что и класс pm_FileManager, но в отношении файлов сервера. В частности, он позволяет создавать и удалять файлы и папки, проверять наличие файлов и папок, читать и записывать данные в файлы, а также изменять права файлов и папок (только в Linux).
Описания и примеры использования некоторых методов приведены ниже.
scanDir() – возвращает список файлов и папок внутри папки по указанному пути.
Использование
array scanDir(string $path [, bool $skipDots = false [, bool $showSystemFiles = true ]])
Параметры
-
path (тип: string)
Папка, которая будет просканирована.
-
skipDots (тип: boolean, значение по умолчанию: false)
Если для необязательного параметра skipDots задано значение «true», корневые папки «..» и «.» будут исключены из результирующего массива, иначе они будут включены в него.
-
showSystemFiles (тип: boolean, значение по умолчанию: true)
Если для необязательного параметра showSystemFiles задано значение «true», скрытые файлы (например, системные файлы) будут включены в результирующий массив, иначе они будут отсутствовать в нем.
Примеры
Дерево папок
$ ls -a var
. .. config.json .gitkeep
Пример
$result = (new \pm_ServerFileManager())->scanDir(\pm_Context::getVarDir()); // Default use
// analogue:
// $result = (new \pm_ServerFileManager())->scanDir(\pm_Context::getVarDir(), false, true);
var_dump($result);
Вывод
array(4) {
[0]=>
string(1) "."
[1]=>
string(2) ".."
[2]=>
string(11) "config.json"
[3]=>
string(8) ".gitkeep"
}
Пример
$result = (new \pm_ServerFileManager())->scanDir(\pm_Context::getVarDir(), true);
// analogue:
// $result = (new \pm_ServerFileManager())->scanDir(\pm_Context::getVarDir(), true, true);
var_dump($result);
Вывод
array(2) {
[0]=>
string(11) "config.json"
[1]=>
string(8) ".gitkeep"
}
Пример
$result = (new \pm_ServerFileManager())->scanDir(\pm_Context::getVarDir(), false, false);
var_dump($result);
Вывод
array(3) {
[0]=>
string(1) "."
[1]=>
string(2) ".."
[2]=>
string(11) "config.json"
}
Пример
$result = (new \pm_ServerFileManager())->scanDir(\pm_Context::getVarDir(), true, false);
var_dump($result);
Вывод
array(1) {
[0]=>
string(11) "config.json"
}
joinPath() – возвращает объединенные части пути.
Возвращаемые значения
Строка, содержащая строковое представление всех указанных частей пути, расположенных в том же порядке и разделенныхс помощью DIRECTORY_SEPARATOR.
Пример
$result = (new \pm_ServerFileManager())->joinPath('var', 'config', 'config.json');
var_dump($result);
Вывод
string(22) "var/config/config.json"
isSubpath() – проверяет, является ли папка по указанному пути подпапкой корневой папки веб-пространства.
Примеры
Пример
$result = (new \pm_ServerFileManager())->isSubpath('/var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds');
var_dump($result);
Вывод
bool(true)
Пример
// assuming that the webspace document root is '/var/www/vhosts/a.a/'
$result1 = (new \pm_ServerFileManager(1))->isSubpath('/var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds');
$result2 = (new \pm_ServerFileManager(1))->isSubpath('/var/www/vhosts/b.b/httpdocs/qwe/qwe/ddd/wqecfds');
var_dump($result1);
var_dump($result2);
Вывод
bool(true)
bool(false)
getRelativeFilePath() – возвращает путь относительно корневой папки веб-пространства для указанного абсолютного пути.
Примеры
Пример
$result = (new \pm_ServerFileManager())->getRelativeFilePath('/var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds');
var_dump($result);
Вывод
string(47) "var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds"
Пример
// assuming that webspace document root is '/var/www/vhosts/a.a/'
$result1 = (new \pm_ServerFileManager(1))->getRelativeFilePath('/var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds');
$result2 = (new \pm_ServerFileManager(1))->getRelativeFilePath('/var/www/vhosts/b.b/httpdocs/qwe/qwe/ddd/wqecfds');
var_dump($result1);
var_dump($result2);
Вывод
string(28) "httpdocs/qwe/qwe/ddd/wqecfds"
string(35) "../b.b/httpdocs/qwe/qwe/ddd/wqecfds"
copyFile() – копирует объекты файловой системы (файлы и папки) из исходной папки в целевую. Папки копируются рекурсивно.
Параметры
- source (тип: string, полный путь к исходной папке)
- destination (тип: string, полный путь к целевой папке)
Пример
(new \pm_ServerFileManager())->copyFile('/tmp/source', '/tmp/destination');
Ниже приводится пример работы с файлами сервера. В этом примере выполняются некоторые действия с содержимым файла. Используются следующие методы:
Используйте следующий код:
$fileManager = new pm_ServerFileManager();
$configPath = PRODUCT_ROOT . '/admin/conf/panel.ini';
if ($fileManager->fileExists($configPath)) {
$fileData = $fileManager->fileGetContents($filePath);
// Some manipulation with file data...
$fileData = str_replace('foo', 'bar', $fileData);
$fileManager->filePutContents($filePath, $fileData);
}